//
// Created by wujehy on 19-3-30.
// Email:wujehy@qq.com
// File :IoTServer.h
//
//
/***
 * 这个 头文件 是用与处理  协议信息
 *
 * 使用方式
 *
 * 初始化 创建 IoTData_t iot 传感器类型
 *
 * IoTData_t data;
 *
 * 然后 配置信息
 *
 *   data.setLen(1); // 配置数据长度
 *   data.setAppid(Appid_WENDU); 配置 数据类 星
 *   data.setData(1,WENDU,0x1234); 配置 数据的 具体信息
 *
 *  然后 获取 数据流
 *   byte 数组
 *   int len=data.getLen() ;// 数据长度
 *   byte *buf = data.getData() //数据内容
 *
 *
 * */

#include <stdio.h>
#define Appid_WENDU   0x5001  //温度
#define Appid_SHIDU   0x5002  //适度
#define Appid_YANWU   0x5003  //烟雾
#define Appid_YUDI    0x5004  //雨滴

#define Appid_HONGWAI 0x5010  //红外 对设
#define Appid_HUOYAN  0x5020  //火焰
#define Appid_RENTI   0x5030  //人体红外

#define WENDU       Appid_WENDU&0x00ff
#define SHIDU       Appid_SHIDU&0x00ff
#define YANWU       Appid_YANWU&0x00ff
#define YUDI        Appid_YUDI&0x00ff
#define HONGWAI     Appid_HONGWAI&0x00ff
#define HUOYAN      Appid_HUOYAN&0x00ff
#define RENTI       Appid_RENTI&0x00ff
typedef struct DataType{
    byte type=0x01;
    byte Appid[2];
    byte len=0;
    byte *data;
    byte *buf;
public:

    void setAppid(int id ){
        DataType::Appid[0]=(id&0xff00)>>8;
        DataType::Appid[1]=id&0xff;
    }


    int getLen(){
        return this->len+6;
    }

    void setLen(int len) {
        DataType::len = len*3;
        this->data=new byte[this->len];
    }

    void setData(int num,byte string[3]) {
        for (int j = 0; j < num*3  ; ++j) {
            this->data[(num-1)*3+j]=string[j];
        }
    }

    void setBuf() {
        int len =6+this->len;
        byte *buf=new byte[len];
        ///////
        buf[0]=this->type;
        buf[1]=this->Appid[0];
        buf[2]=this->Appid[1];
        buf[3]=this->len;
        for (int i=0;i<this->len;i++){
            buf[4+i]=this->data[i];
        }
        buf[len-2]=0x0d;
        buf[len-1]=0x0a;

        DataType::buf = buf;
    }

    void setData(int num,byte name, int value){
        byte buf[3];
        buf[0]=name;
        buf[1]=(value&0xff00)>>8;
        buf[2]=value&0xff;
        //        DataType::data=buf;
        DataType::setData(num,buf);
        DataType::setBuf();
    }

    byte* getData(){
        return this->buf;
    };
}  IoTData_t;
